package com.tencreat.service.mall;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.tencreat.common.core.HttpResult;
import com.tencreat.common.core.domain.model.LoginUser;
import com.tencreat.common.core.domain.model.ReqIdParam;
import com.tencreat.common.core.domain.model.ReqIdsParam;
import com.tencreat.domain.mall.MallGoods;
import com.tencreat.domain.mall.MallStoreGoods;
import com.tencreat.domain.mall.dto.*;
import com.tencreat.domain.mall.vo.*;

import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;

/**
 * 店铺商品基本信息Service接口
 *
 * @author tencreat
 * @date 2021-08-13
 */
public interface IMallStoreGoodsService extends IService<MallStoreGoods> {
    /**
     * 查询店铺商品基本信息
     *
     * @param id 商品基本信息ID
     * @return 商品基本信息
     */
    public MallStoreGoods selectMallStoreGoodsById(ReqIdParam id);

    /**
     * 查询店铺商品基本信息列表
     *
     * @param mallStoreGoods 商品基本信息
     * @return 商品基本信息集合
     */
    public List<MallStoreGoods> selectMallStoreGoodsList(MallStoreGoods mallStoreGoods);

    /**
     * 新增店铺商品基本信息
     *
     * @param mallStoreGoods 商品基本信息
     * @return 结果
     */
    public int insertMallStoreGoods(MallStoreGoods mallStoreGoods);

    /**
     * 修改店铺商品基本信息
     *
     * @param mallStoreGoods 商品基本信息
     * @return 结果
     */
    public int updateMallStoreGoods(MallStoreGoods mallStoreGoods);

    /**
     * 批量删除店铺商品基本信息
     *
     * @param ids 需要删除的商品基本信息ID
     * @return 结果
     */
    public int deleteMallStoreGoodsByIds(ReqIdsParam ids);

    /**
     * 删除店铺商品基本信息信息
     *
     * @param id 商品基本信息ID
     * @return 结果
     */
    public int deleteMallStoreGoodsById(ReqIdParam id);

    /**
     * 新增店铺商品
     * @param mallShopGoodsAddDTO
     * @return
     */
    int insertMallStoreGoodsPo(MallShopGoodsAddDTO mallShopGoodsAddDTO);

    MallStoreGoodsAllVO getInfoGoodsVo(ReqIdParam id);

    IPage<MallStoreTableVO> pageTableVo(MallShopGoodsDTO mallShopGoodsDTO);

    int updateMallStoreGoodsPo(MallShopGoodsAddDTO mallShopGoodsAddDTO);

    IPage<MallStoreGoodsListVO> apiList(MallStoreGoodsSearchDTO mallStoreGoodsSearchDTO);

    ResStoreGoodsDetailVO queryInfoByGoodsSn(ReqIdParam id, LoginUser loginUser);

    MallStoreGoodsDetailsVO goodInfoById(ReqIdParam idParam);

    HttpResult<List<MallStoreGoods>> selectNewGoods(MallStoreGoods mallStoreGoods);

    /**
     * 商品审核
     * @param dto 入参
     */
    void audit(MallGoodsAuditDTO dto);

    List<MallStoreGoods> getByOrderSn(String orderSn);

    HashMap<String, BigDecimal> getGoodPrice(GoodsVO good);

    List<Integer> queryCount();

    boolean reSortOrderReduce(MallStoreGoods mallStoreGoods);

    boolean reSortOrderPlus(MallStoreGoods mallStoreGoods);
}
